/*
 * 文件描述：自定义进度条的头文件
 * 文件作用：声明自定义进度条类sliderProgress
 * 文件创建时间：2017-4-1
 * 文件创建者：wsgalaxy@163.com
 * 文件最后修改时间：
 * 文件修改者：
 * 文件协议：GPL
 *
 */

/*
 * 自定义进度条描述：高度固定为50px，最小宽度为110px，其中两边各有10px的空隙。
 *
 */

#ifndef SLIDERPROGRESS_H
#define SLIDERPROGRESS_H

#include <QWidget>
#include <QMouseEvent>

class sliderProgress : public QWidget
{
    Q_OBJECT

private:
    int minimum;        //最小值
    int maximum;        //最大值
    int singleStep;     //每一步的大小
    int value;          //当前值
    bool tracking;      //是否每次当前值发生改变就发出valueChange(int)信号
                        //false：不是 true：是
    int isPointed;      //标记鼠标是否选中了游标
                        //0：不是 1：是
    int isAlwaysShow;   //游标是否始终显示
                        //0：不是 1：是
    int isShow;         //是否该显示游标
                        //0：不是 1：是
    int allowSetValue;  //是否允许由外部设置值
public:
    explicit sliderProgress(QWidget *parent = 0);

    void setMinimum(int n);         //设置最小值
    void setMaximum(int n);         //设置最大值
    //void setValue(int v);
    void setTracking(bool s);       //设置tracking
    void setIsAlwaysShow(int s);    //设置isAlwaysShow

    int getMaximum();   //获取maximum
    int getMinimum();   //获取minimum
    bool hasTracking(); //获取tracking

signals:
    void valueChanged(int value);           //value发生改变时发出的信号（取决于是否设置tracking）
    void rangeChange(int min, int max);     //范围发生改变时发出
    void valueChangedTracking(int v);       //每次value发生改变时都发出


public slots:
    void setValue(int v);               //设置value
    void setRange(int min, int max);    //设置maximum, minimum


protected:
    void paintEvent(QPaintEvent* event);
    void mouseMoveEvent(QMouseEvent* event);
    void mousePressEvent(QMouseEvent* event);
    void mouseReleaseEvent(QMouseEvent* event);
    void enterEvent(QEvent* event);
    void leaveEvent(QEvent* event);
};

#endif // SLIDERPROGRESS_H
